package com.tool.xmltool.constant;

import lombok.extern.slf4j.Slf4j;

/**
 * 报文相关配置
 *
 * @author weijian.dong
 * @date 2/22/2022 1:30 PM
 * @since 1.0
 */
@Slf4j
public class XmlHeadConstant {

    // 报文头属性

    /**
     * 报文传输方向
     * 由NPC发出(cips发出)：D
     */
    public static final String MSG_DIRECTION_D = "D";

    /**
     * 报文传输方向
     * 行内发出
     */
    public static final String MSG_DIRECTION_U = "U";

    /**
     * 报文发起人
     * 35字节
     */
    public static final String ORIGSENDER = "origSender";
    /**
     * 报文接收人
     * 35字节
     */
    public static final String ORIGRECEIVER = "origReceiver";
    /**
     * 报文发起日期
     * 8字节
     */
    public static final String ORIGSENDDATE = "origSendDate";
    /**
     * 报文发起时间
     * 6字节
     */
    public static final String ORIGSENDTIME = "origSendTime";
    /**
     * 报文类型代码
     * 20字节
     */
    public static final String MESGTYPE = "mesgType";
    /**
     * 通信级标识号
     * 20字节
     */
    public static final String MESGID = "mesgID";
    /**
     * 通信级参考号
     * 20字节
     */
    public static final String MESGREFID = "mesgRefID";
    /**
     * 报文优先级 1：特急；2：紧急；3：普通；
     * 1字节
     */
    public static final String MESGPRIORITY = "mesgPriority";
    /**
     * 报文传输方向 U 行内发出 D cips发出
     * 1字节
     */
    public static final String MESGDIRECTION = "mesgDirection";
    /**
     * 保留域
     * 9字节
     */
    public static final String RESERVE = "reserve";

    /**
     * CIPS常量
     */
    public static final String CIPS = "cips";

    public static final String CCMS = "ccms";

    /**
     * HVPS常量
     */
    public static final String HVPS = "hvps";

    /**
     * CIPS常量
     */
    public static final String CIPS_U = "CIPS";

    /**
     * HVPS常量
     */
    public static final String HVPS_U = "HVPS";


    /**
     * 报文头日期格式
     */
    public static final String HEAD_D_FORMAT = "yyyyMMdd";

    /**
     * 报文头时间格式
     */
    public static final String HEAD_T_FORMAT = "hhmmss";

    /**
     * 前置填充
     */
    public static final Integer FRONT_FILL = 0;
    /**
     * 后置填充
     */
    public static final Integer BACK_FILL = 1;
    /**
     * 固定35位
     */
    public static final int FIX_35 = 35;

    /**
     * 固定14位
     */
    public static final int FIX_14 = 14;

    /**
     * 固定20位
     */
    public static final int FIX_20 = 20;
    /**
     * 固定9位
     */
    public static final int FIX_9 = 9;
    /**
     * 固定8位
     */
    public static final int FIX_8 = 8;
    /**
     * 固定6位
     */
    public static final int FIX_6 = 6;
    /**
     * 固定1位
     */
    public static final int FIX_1 = 1;

    /**
     * <p><strong>属性及填充规则</strong></p>
     *
     * <p><strong>只有标识类型为后补空格(0x20),其他类型前补0(0x30)</strong></p>
     *
     * <p>x类型标识字符，取值范围为a-z、A-Z、0-9、.(英文句号)、－(连字符)、_(下划线)；</p>
     *
     * <p>n类型标识数字，取值范围为0-9；</p>
     *
     * <p>d类型标识日期，格式为：yyyymmdd；</p>
     *
     * <p>t类型标识时间，格式为：hhmmss；</p>
     */
    public static final String X_FILL = new String(new char[]{0x20});
    /**
     * <p>其他类型填充标识</p>
     */
    public static final String OTHER_FILL = new String(new char[]{0x30});


    /**
     * 报文头起始标志
     */
    private static final String HEAD_BEGIN = "{H:";
    /**
     * 报文头结束标志
     */
    private static final String HEAD_END = "}";
    /**
     * 报文头去除末尾的/r/n后长度固定为172字节
     */
    public static final Integer CIPS_HEAD_MIN_LEN = 172;

    /**
     * 报文头包含/r/n后长度固定为174字节
     */
    public static final Integer CIPS_HEAD_MAX_LEN = 174;

    /**
     * hvps报文头包含/r/n后长度
     */
    public static final Integer HVPS_HEAD_MAX_LEN = 132;

    /**
     * hvps报文头不包含/r/n后长度
     */
    public static final Integer HVPS_HEAD_MIN_LEN = 130;


}
